
/**
 * 集合工具类
 * uniqueSimpleArray 对数组元素进行去重操作(里面是简单元素)
 */
let CollectionUtils = (function(){
  return {
    /**
     * 清除重复数据,字符串数组
     * @param array
     * @returns
     */
    uniqueSimpleArray:function(array){
      const res = new Map();
      return array.filter((a) => !res.has(a) && res.set(a, 1))
    }
  }
})();

/**
 * StringUtil 工具类
 */
let StringUtil = (function(){
  /*
   * 把EXT_ORG_TYPE这种下划线格式的数据转换成extOrgType驼峰式
   * */
  function _2aB(name) {
    let result = '';
    // 快速检查
    if (name === '') {
      // 没必要转换
      return "";
    } else if (name.indexOf("_") === '-1') {
      // 不含下划线，全部转小写
      return name.toLowerCase();
    }
    // 用下划线将原始字符串分割
    let camels = name.split("_");
    for (let i = 0, len = camels.length; i < len; i++) {
      let camel = camels[i];
      // 跳过原始字符串中开头、结尾的下换线或双重下划线
      if (camel === '') {
        continue;
      }
      // 处理真正的驼峰片段
      if (result.length === 0) {
        // 第一个驼峰片段，全部字母都小写
        result += camel.toLowerCase();
      } else {
        // 其他的驼峰片段，首字母大写
        result += (camel.substring(0, 1).toUpperCase());
        result += (camel.substring(1).toLowerCase());
      }
    }
    return result.toString();
  }
  /*
   * 把extOrgType驼峰式的数据转换成EXT_ORG_TYPE下划线格式
   * */
  function aB2_(name) {
    //  let name="extOrgType";
    let result = '';
    if (name !== '' && name.length > 0) {
      // 循环处理其余字符
      for (let i = 0; i < name.length; i++) {
        let s = name.substring(i, i + 1);
        // 在大写字母前添加下划线
        if (s === s.toUpperCase()) {
          result += ("_");
        }
        // 其他字符直接转成大写
        result += (s.toUpperCase());
      }
    }
    return result.toString();
  }

  /**
   * 判断字符串是否为空
   */
  function isBlank(source){
    if(source === null || source === undefined ){
      return true;
    }
    if(typeof source !== 'string'){
      throw new Error('判断为空,只支持字符串类型');
    }
    return source.replace(/\s*/,'').length === 0;
  }

  return {
    _2aB:_2aB,
    aB2_:aB2_,
    isBlank:isBlank
  }
})();


/**
 * 格式化工具
 */
let FormatUtil = (function(){
  let defaultDateFormat = 'yyyy-MM-dd';
  /**
   *
   * @param time long 型日期,或 Date 对象
   * @param format 格式,支持
   *  yyyy 年
   *  MM 月
   *  dd 日
   *  HH 小时
   *  mm 分钟
   *  ss 秒
   */
  function dateFormat(time,format){
    if(StringUtil.isBlank(format)){
      format = defaultDateFormat;
    }
    if(typeof time == 'number'){
      time = new Date(time);
    }
    let tf = function(i){return (i < 10 ? '0' : '') + i ;};
    return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function(a){
      switch(a){
        case 'yyyy':
          return tf(time.getFullYear());
        case 'MM':
          return tf(time.getMonth() + 1);
        case 'mm':
          return tf(time.getMinutes());
        case 'dd':
          return tf(time.getDate());
        case 'HH':
          return tf(time.getHours());
        case 'ss':
          return tf(time.getSeconds());
      }
    });
  }

  /**
   * 格式化字符串
   * @param source {0}xxx{1}
   * @param 后面接的参数会依次替换 {0},{1}
   */
  function stringFormat(){
    if(arguments.length < 1 || StringUtil.isBlank(arguments[0])){
      return '';
    }
    //先要保存原来的 arguments
    let paramsMap=[];
    for(let i=1;i<arguments.length;i++){
      paramsMap.push(arguments[i]);
    }
    return arguments[0].replace(/\{(\d+)\}/g,function(m,i){
      return paramsMap[i];
    });
  }

  return {
    dateFormat:dateFormat,
    stringFormat:stringFormat
  }
})();

/**
 * 获取根路径
 * @returns {string}
 */
function getRootPath(){
  let curWwwPath=top.document.location.href;
  let a = document.createElement('a');
  a.href = curWwwPath;

  // sanritools/xx/xx
  let pathname = a.pathname.substr(1);
  //获取项目名称
  let projectName = pathname.substring(0,pathname.indexOf('/'));

  return (a.protocol+'//'+a.host+'/'+projectName);
}

export default {
  StringUtil,FormatUtil,CollectionUtils,getRootPath

}
